package com.example.service;

import com.example.model.Article;
import org.apache.ibatis.annotations.Param;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * Description:帖子相关操作
 * User: bjc
 * Date: 2025-10-10
 * Time: 20:55
 */
public interface IArticleService {

    /**
     * 创建帖子
     * @param article 帖子信息
     */
    @Transactional //创建帖子需要修改三个数据表，包含用户表、帖子表、板块表，所以要保证数据库操作是原子性操作
    void createArticle(Article article);

    /**
     * 查询所有帖子,帖子以发布时间降序排序
     * @return 所有帖子列表
     */
    List<Article> selectAll();
    /**
     * 根据板块id查询帖子列表
     * @param boardId 板块id
     * @return 帖子列表
     */
    List<Article> selectByBoardId(Long boardId);
    /**
     * 根据帖子id查询帖子详情
     * @param ArticleId 帖子id
     * @return 帖子详情
     */
    Article selectDetailById(Long ArticleId);

    /**
     * 根据帖子id查询帖子详情，区分编辑模式和查看模式下的访问数增加
     * @param articleId
     * @param increaseVisit
     * @return
     */
    Article selectDetailById(Long articleId, boolean increaseVisit);
    /**
     * 修改帖子信息
     * @param id 帖子id
     * @param title 帖子标题
     * @param content 帖子内容
     */
    void modifyArticleById(Long id,String title, String content);

    /**
     * 根据id查询帖子信息
     * @param id 帖子id
     * @return 帖子信息
     */
    Article selectById(Long id);

    /**
     * 根据帖子id点赞帖子
     * @param id 帖子id
     */
    void thumbsUpById(Long id);

    /**
     * 根据id删除帖子
     * @param id 帖子id
     */
    void deleteById(Long id);

    /**
     * 根据帖子id增加帖子的回复数
     * @param id 帖子id
     */
    void addOneArticleReplyCountById(Long id);
    /**
     * 根据用户id查询帖子列表
     * @param userId 用户id
     * @return 帖子列表
     */
    List<Article> selectByUserId(Long userId);
}
